{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "my_arr = np.arange(1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "my_list = list(range(1000000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 93 ms\n"
     ]
    }
   ],
   "source": [
    "%time for _ in range(10):my_arr2 = my_arr*2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 1.05 s\n"
     ]
    }
   ],
   "source": [
    "%time for _ in range(10):my_list2 = [x*2 for x in my_list]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = np.random.randn(2,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.94839475,  1.87164025, -0.37716279],\n",
       "       [ 1.20632295, -0.90484411, -0.0544985 ]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -9.4839475 ,  18.71640247,  -3.77162792],\n",
       "       [ 12.06322954,  -9.0484411 ,  -0.54498498]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data * 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.8967895 ,  3.74328049, -0.75432558],\n",
       "       [ 2.41264591, -1.80968822, -0.108997  ]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data + data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2L, 3L)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data1 = [6,7.5,8,0,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr1 = np.array(data1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 6. ,  7.5,  8. ,  0. ,  1. ])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data2 = [[1,2,3,4],[5,6,7,8]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr2 = np.array(data2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3, 4],\n",
       "       [5, 6, 7, 8]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2L, 4L)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr1.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  0.,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.,  0.,  0.,  0.]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros((3,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  8.74496193e-322,   0.00000000e+000],\n",
       "        [  0.00000000e+000,   0.00000000e+000],\n",
       "        [  0.00000000e+000,   0.00000000e+000]],\n",
       "\n",
       "       [[  0.00000000e+000,   0.00000000e+000],\n",
       "        [  0.00000000e+000,   0.00000000e+000],\n",
       "        [  0.00000000e+000,   0.00000000e+000]]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.empty((2,3,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1.,  1.],\n",
       "        [ 1.,  1.],\n",
       "        [ 1.,  1.],\n",
       "        [ 1.,  1.]],\n",
       "\n",
       "       [[ 1.,  1.],\n",
       "        [ 1.,  1.],\n",
       "        [ 1.,  1.],\n",
       "        [ 1.,  1.]]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.ones_like(np.empty((2,4,2)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.full?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  0.,  0.,  0.],\n",
       "       [ 0.,  1.,  0.,  0.],\n",
       "       [ 0.,  0.,  1.,  0.],\n",
       "       [ 0.,  0.,  0.,  1.]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.eye(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr1 = np.array([1,2,3],dtype=np.float64)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr2 = np.array([1,2,3],dtype=np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr1.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "float_arr = arr.astype('f8')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "float_arr.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.array([3.7-1.2,-2.6,0.5,12.9,10.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2.5,  -2.6,   0.5,  12.9,  10.1])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2, -2,  0, 12, 10], dtype=int8)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.astype('i1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "numeric_strings = np.array(['1.25','-9.6','42'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['1.25', '-9.6', '42'], \n",
       "      dtype='|S4')"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numeric_strings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1.25,  -9.6 ,  42.  ])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numeric_strings.astype(float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "int_array = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "calibers = np.array([.22,.27,.357,.38,.44,.50])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int_array.astype(calibers.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "empty_unit32 = np.empty(8,dtype='u4')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 1, 0, 3, 0, 4, 0], dtype=uint32)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "empty_unit32"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.array([[1,2,3],[4,5,6]],dtype=float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  2.,  3.],\n",
       "       [ 4.,  5.,  6.]])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1.,   4.,   9.],\n",
       "       [ 16.,  25.,  36.]])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr * arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr - arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.        ,  0.5       ,  0.33333333],\n",
       "       [ 0.25      ,  0.2       ,  0.16666667]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1 / arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.        ,  1.41421356,  1.73205081],\n",
       "       [ 2.        ,  2.23606798,  2.44948974]])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr ** 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False, False],\n",
       "       [False, False, False]], dtype=bool)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2 > arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  2.,  3.],\n",
       "       [ 4.,  5.,  6.]])"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5, 6, 7])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[5:8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr[5:8]=12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr_slice = arr[5:8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([12, 12, 12])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr_slice"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr_slice[1] = 123456"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([     0,      1,      2,      3,      4,     12, 123456,     12,\n",
       "            8,      9])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr_slice[:] = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 8, 9])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[0][2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[0,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr3d = np.arange(1,13).reshape([2,2,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1,  2,  3],\n",
       "        [ 4,  5,  6]],\n",
       "\n",
       "       [[ 7,  8,  9],\n",
       "        [10, 11, 12]]])"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "old_values = arr3d[0].copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr3d[0] = 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 4,  4,  4],\n",
       "        [ 4,  4,  4]],\n",
       "\n",
       "       [[ 7,  8,  9],\n",
       "        [10, 11, 12]]])"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "old_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr3d[0] = old_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1,  2,  3],\n",
       "        [ 4,  5,  6]],\n",
       "\n",
       "       [[ 7,  8,  9],\n",
       "        [10, 11, 12]]])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 8, 9])"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d[1,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = arr3d[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 7,  8,  9],\n",
       "       [10, 11, 12]])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 8, 9])"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1,  2,  3,  4, 64])"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[1:6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 1,  2,  3],\n",
       "        [ 4,  5,  6]],\n",
       "\n",
       "       [[ 7,  8,  9],\n",
       "        [10, 11, 12]]])"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6],\n",
       "       [7, 8, 9]])"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2, 3],\n",
       "       [5, 6]])"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[:2,1:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([4, 5])"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[1,:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 6])"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[:2,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1],\n",
       "       [4],\n",
       "       [7]])"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d[:,:1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr2d[:2,1:]=0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0],\n",
       "       [4, 0, 0],\n",
       "       [7, 8, 9]])"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr2d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    " names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will',\n",
    "'Joe', 'Joe'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = np.random.randn(7,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], \n",
       "      dtype='|S4')"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.42094468,  1.30635832,  0.47307963,  0.90798999],\n",
       "       [-0.80486754, -1.27763988,  0.61434386, -1.18587285],\n",
       "       [-0.35748898, -0.5284566 ,  0.0733632 , -2.09080821],\n",
       "       [ 0.34307178,  0.20613345,  1.55243702, -0.60177091],\n",
       "       [ 0.29165434, -0.05092365,  0.93103469, -0.6776344 ],\n",
       "       [-0.39374179, -1.45370154,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 , -0.72178902, -1.13625487]])"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True, False, False, False], dtype=bool)"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names == 'Bob'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.42094468,  1.30635832,  0.47307963,  0.90798999],\n",
       "       [ 0.34307178,  0.20613345,  1.55243702, -0.60177091]])"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[names == 'Bob']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.47307963,  0.90798999],\n",
       "       [ 1.55243702, -0.60177091]])"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data [names=='Bob',2:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.90798999, -0.60177091])"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data [names=='Bob',3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False,  True,  True, False,  True,  True,  True], dtype=bool)"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "names !='Bob'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.80486754, -1.27763988,  0.61434386, -1.18587285],\n",
       "       [-0.35748898, -0.5284566 ,  0.0733632 , -2.09080821],\n",
       "       [ 0.29165434, -0.05092365,  0.93103469, -0.6776344 ],\n",
       "       [-0.39374179, -1.45370154,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 , -0.72178902, -1.13625487]])"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[~(names == 'Bob')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cond = names == 'Bob'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.80486754, -1.27763988,  0.61434386, -1.18587285],\n",
       "       [-0.35748898, -0.5284566 ,  0.0733632 , -2.09080821],\n",
       "       [ 0.29165434, -0.05092365,  0.93103469, -0.6776344 ],\n",
       "       [-0.39374179, -1.45370154,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 , -0.72178902, -1.13625487]])"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[~cond]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mask = (names == 'Bob') | (names == 'Will')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False,  True,  True,  True, False, False], dtype=bool)"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data[mask]=0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [-0.80486754, -1.27763988,  0.61434386, -1.18587285],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [-0.39374179, -1.45370154,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 , -0.72178902, -1.13625487]])"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data[data < 0] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.61434386,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ],\n",
       "       [ 0.        ,  0.        ,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 ,  0.        ,  0.        ]])"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data[names != 'Joe'] = 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 7.        ,  7.        ,  7.        ,  7.        ],\n",
       "       [ 0.        ,  0.        ,  0.61434386,  0.        ],\n",
       "       [ 7.        ,  7.        ,  7.        ,  7.        ],\n",
       "       [ 7.        ,  7.        ,  7.        ,  7.        ],\n",
       "       [ 7.        ,  7.        ,  7.        ,  7.        ],\n",
       "       [ 0.        ,  0.        ,  0.37796121,  1.57829085],\n",
       "       [ 0.860108  ,  1.0493256 ,  0.        ,  0.        ]])"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.empty((8,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for i in range(8):\n",
    "    arr[i] = i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  0.,  0.],\n",
       "       [ 1.,  1.,  1.,  1.],\n",
       "       [ 2.,  2.,  2.,  2.],\n",
       "       [ 3.,  3.,  3.,  3.],\n",
       "       [ 4.,  4.,  4.,  4.],\n",
       "       [ 5.,  5.,  5.,  5.],\n",
       "       [ 6.,  6.,  6.,  6.],\n",
       "       [ 7.,  7.,  7.,  7.]])"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4.,  4.,  4.,  4.],\n",
       "       [ 3.,  3.,  3.,  3.],\n",
       "       [ 0.,  0.,  0.,  0.],\n",
       "       [ 6.,  6.,  6.,  6.]])"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[[4,3,0,6]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 5.,  5.,  5.,  5.],\n",
       "       [ 3.,  3.,  3.,  3.],\n",
       "       [ 1.,  1.,  1.,  1.]])"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[[-3,-5,-7]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(32).reshape((8,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11],\n",
       "       [12, 13, 14, 15],\n",
       "       [16, 17, 18, 19],\n",
       "       [20, 21, 22, 23],\n",
       "       [24, 25, 26, 27],\n",
       "       [28, 29, 30, 31]])"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 4, 23, 29, 10])"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[[1,5,7,2],[0,3,1,2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr3 = np.arange(24).reshape((2,3,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7],\n",
       "        [ 8,  9, 10, 11]],\n",
       "\n",
       "       [[12, 13, 14, 15],\n",
       "        [16, 17, 18, 19],\n",
       "        [20, 21, 22, 23]]])"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7],\n",
       "        [ 8,  9, 10, 11]]])"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr3[[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  3,  1,  2],\n",
       "       [ 4,  7,  5,  6],\n",
       "       [28, 31, 29, 30],\n",
       "       [ 8, 11,  9, 10]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr[[0,1,7,2]][:,[0,3,1,2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(15).reshape((3,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  5, 10],\n",
       "       [ 1,  6, 11],\n",
       "       [ 2,  7, 12],\n",
       "       [ 3,  8, 13],\n",
       "       [ 4,  9, 14]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(6,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  8.39981175e-01,  -3.32134984e-01,   4.68706213e-02],\n",
       "       [  5.32403336e-01,   1.80169669e-01,  -4.14574259e-01],\n",
       "       [  2.47511636e-01,  -2.77816011e-01,  -1.55670956e+00],\n",
       "       [  1.44954630e+00,   2.43253829e-01,  -1.75164007e+00],\n",
       "       [ -2.42321049e+00,   2.22683143e-01,   3.81772098e-01],\n",
       "       [  1.95788896e-03,   2.18697931e+00,   2.03882517e+00]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 9.02342106, -0.43454547, -4.02685974],\n",
       "       [-0.43454547,  5.11159521,  4.46000729],\n",
       "       [-4.02685974,  4.46000729,  9.96821428]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(arr.T,arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(16).reshape((2,2,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7]],\n",
       "\n",
       "       [[ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 8,  9, 10, 11]],\n",
       "\n",
       "       [[ 4,  5,  6,  7],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.transpose((1,0,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  1,  2,  3],\n",
       "        [ 4,  5,  6,  7]],\n",
       "\n",
       "       [[ 8,  9, 10, 11],\n",
       "        [12, 13, 14, 15]]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[ 0,  4],\n",
       "        [ 1,  5],\n",
       "        [ 2,  6],\n",
       "        [ 3,  7]],\n",
       "\n",
       "       [[ 8, 12],\n",
       "        [ 9, 13],\n",
       "        [10, 14],\n",
       "        [11, 15]]])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.swapaxes(1,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ,\n",
       "        2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1.00000000e+00,   2.71828183e+00,   7.38905610e+00,\n",
       "         2.00855369e+01,   5.45981500e+01,   1.48413159e+02,\n",
       "         4.03428793e+02,   1.09663316e+03,   2.98095799e+03,\n",
       "         8.10308393e+03])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.exp(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = np.random.randn(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = np.random.randn(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([-1.22643695,  0.73350683,  0.47614673, -0.6146256 ,  1.55785268,\n",
       "        -0.78827703, -0.87946512,  1.58403686]),\n",
       " array([ 0.50583718,  1.37465182, -0.30187878, -1.12737882, -0.99036648,\n",
       "         1.51923047, -0.60523507, -0.74799543]))"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.50583718,  1.37465182,  0.47614673, -0.6146256 ,  1.55785268,\n",
       "        1.51923047, -0.60523507,  1.58403686])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.maximum(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(7)  * 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2.60131   ,   7.77627686,   8.41447252, -12.82690538,\n",
       "         5.65890441,  -3.94917835,  -2.77144372])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "remainder,whole_Part = np.modf(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.60131   ,  0.77627686,  0.41447252, -0.82690538,  0.65890441,\n",
       "       -0.94917835, -0.77144372])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "remainder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2.,   7.,   8., -12.,   5.,  -3.,  -2.])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "whole_Part"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2.60131   ,   7.77627686,   8.41447252, -12.82690538,\n",
       "         5.65890441,  -3.94917835,  -2.77144372])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda2\\lib\\site-packages\\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in sqrt\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 1.61285771,  2.78859765,  2.90077102,         nan,  2.37884518,\n",
       "               nan,         nan])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda2\\lib\\site-packages\\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in sqrt\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 1.61285771,  2.78859765,  2.90077102,         nan,  2.37884518,\n",
       "               nan,         nan])"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(arr,arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.61285771,  2.78859765,  2.90077102,         nan,  2.37884518,\n",
       "               nan,         nan])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "points = np.arange(-5,5,0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -5.00000000e+00,  -4.99000000e+00,  -4.98000000e+00,\n",
       "        -4.97000000e+00,  -4.96000000e+00,  -4.95000000e+00,\n",
       "        -4.94000000e+00,  -4.93000000e+00,  -4.92000000e+00,\n",
       "        -4.91000000e+00,  -4.90000000e+00,  -4.89000000e+00,\n",
       "        -4.88000000e+00,  -4.87000000e+00,  -4.86000000e+00,\n",
       "        -4.85000000e+00,  -4.84000000e+00,  -4.83000000e+00,\n",
       "        -4.82000000e+00,  -4.81000000e+00,  -4.80000000e+00,\n",
       "        -4.79000000e+00,  -4.78000000e+00,  -4.77000000e+00,\n",
       "        -4.76000000e+00,  -4.75000000e+00,  -4.74000000e+00,\n",
       "        -4.73000000e+00,  -4.72000000e+00,  -4.71000000e+00,\n",
       "        -4.70000000e+00,  -4.69000000e+00,  -4.68000000e+00,\n",
       "        -4.67000000e+00,  -4.66000000e+00,  -4.65000000e+00,\n",
       "        -4.64000000e+00,  -4.63000000e+00,  -4.62000000e+00,\n",
       "        -4.61000000e+00,  -4.60000000e+00,  -4.59000000e+00,\n",
       "        -4.58000000e+00,  -4.57000000e+00,  -4.56000000e+00,\n",
       "        -4.55000000e+00,  -4.54000000e+00,  -4.53000000e+00,\n",
       "        -4.52000000e+00,  -4.51000000e+00,  -4.50000000e+00,\n",
       "        -4.49000000e+00,  -4.48000000e+00,  -4.47000000e+00,\n",
       "        -4.46000000e+00,  -4.45000000e+00,  -4.44000000e+00,\n",
       "        -4.43000000e+00,  -4.42000000e+00,  -4.41000000e+00,\n",
       "        -4.40000000e+00,  -4.39000000e+00,  -4.38000000e+00,\n",
       "        -4.37000000e+00,  -4.36000000e+00,  -4.35000000e+00,\n",
       "        -4.34000000e+00,  -4.33000000e+00,  -4.32000000e+00,\n",
       "        -4.31000000e+00,  -4.30000000e+00,  -4.29000000e+00,\n",
       "        -4.28000000e+00,  -4.27000000e+00,  -4.26000000e+00,\n",
       "        -4.25000000e+00,  -4.24000000e+00,  -4.23000000e+00,\n",
       "        -4.22000000e+00,  -4.21000000e+00,  -4.20000000e+00,\n",
       "        -4.19000000e+00,  -4.18000000e+00,  -4.17000000e+00,\n",
       "        -4.16000000e+00,  -4.15000000e+00,  -4.14000000e+00,\n",
       "        -4.13000000e+00,  -4.12000000e+00,  -4.11000000e+00,\n",
       "        -4.10000000e+00,  -4.09000000e+00,  -4.08000000e+00,\n",
       "        -4.07000000e+00,  -4.06000000e+00,  -4.05000000e+00,\n",
       "        -4.04000000e+00,  -4.03000000e+00,  -4.02000000e+00,\n",
       "        -4.01000000e+00,  -4.00000000e+00,  -3.99000000e+00,\n",
       "        -3.98000000e+00,  -3.97000000e+00,  -3.96000000e+00,\n",
       "        -3.95000000e+00,  -3.94000000e+00,  -3.93000000e+00,\n",
       "        -3.92000000e+00,  -3.91000000e+00,  -3.90000000e+00,\n",
       "        -3.89000000e+00,  -3.88000000e+00,  -3.87000000e+00,\n",
       "        -3.86000000e+00,  -3.85000000e+00,  -3.84000000e+00,\n",
       "        -3.83000000e+00,  -3.82000000e+00,  -3.81000000e+00,\n",
       "        -3.80000000e+00,  -3.79000000e+00,  -3.78000000e+00,\n",
       "        -3.77000000e+00,  -3.76000000e+00,  -3.75000000e+00,\n",
       "        -3.74000000e+00,  -3.73000000e+00,  -3.72000000e+00,\n",
       "        -3.71000000e+00,  -3.70000000e+00,  -3.69000000e+00,\n",
       "        -3.68000000e+00,  -3.67000000e+00,  -3.66000000e+00,\n",
       "        -3.65000000e+00,  -3.64000000e+00,  -3.63000000e+00,\n",
       "        -3.62000000e+00,  -3.61000000e+00,  -3.60000000e+00,\n",
       "        -3.59000000e+00,  -3.58000000e+00,  -3.57000000e+00,\n",
       "        -3.56000000e+00,  -3.55000000e+00,  -3.54000000e+00,\n",
       "        -3.53000000e+00,  -3.52000000e+00,  -3.51000000e+00,\n",
       "        -3.50000000e+00,  -3.49000000e+00,  -3.48000000e+00,\n",
       "        -3.47000000e+00,  -3.46000000e+00,  -3.45000000e+00,\n",
       "        -3.44000000e+00,  -3.43000000e+00,  -3.42000000e+00,\n",
       "        -3.41000000e+00,  -3.40000000e+00,  -3.39000000e+00,\n",
       "        -3.38000000e+00,  -3.37000000e+00,  -3.36000000e+00,\n",
       "        -3.35000000e+00,  -3.34000000e+00,  -3.33000000e+00,\n",
       "        -3.32000000e+00,  -3.31000000e+00,  -3.30000000e+00,\n",
       "        -3.29000000e+00,  -3.28000000e+00,  -3.27000000e+00,\n",
       "        -3.26000000e+00,  -3.25000000e+00,  -3.24000000e+00,\n",
       "        -3.23000000e+00,  -3.22000000e+00,  -3.21000000e+00,\n",
       "        -3.20000000e+00,  -3.19000000e+00,  -3.18000000e+00,\n",
       "        -3.17000000e+00,  -3.16000000e+00,  -3.15000000e+00,\n",
       "        -3.14000000e+00,  -3.13000000e+00,  -3.12000000e+00,\n",
       "        -3.11000000e+00,  -3.10000000e+00,  -3.09000000e+00,\n",
       "        -3.08000000e+00,  -3.07000000e+00,  -3.06000000e+00,\n",
       "        -3.05000000e+00,  -3.04000000e+00,  -3.03000000e+00,\n",
       "        -3.02000000e+00,  -3.01000000e+00,  -3.00000000e+00,\n",
       "        -2.99000000e+00,  -2.98000000e+00,  -2.97000000e+00,\n",
       "        -2.96000000e+00,  -2.95000000e+00,  -2.94000000e+00,\n",
       "        -2.93000000e+00,  -2.92000000e+00,  -2.91000000e+00,\n",
       "        -2.90000000e+00,  -2.89000000e+00,  -2.88000000e+00,\n",
       "        -2.87000000e+00,  -2.86000000e+00,  -2.85000000e+00,\n",
       "        -2.84000000e+00,  -2.83000000e+00,  -2.82000000e+00,\n",
       "        -2.81000000e+00,  -2.80000000e+00,  -2.79000000e+00,\n",
       "        -2.78000000e+00,  -2.77000000e+00,  -2.76000000e+00,\n",
       "        -2.75000000e+00,  -2.74000000e+00,  -2.73000000e+00,\n",
       "        -2.72000000e+00,  -2.71000000e+00,  -2.70000000e+00,\n",
       "        -2.69000000e+00,  -2.68000000e+00,  -2.67000000e+00,\n",
       "        -2.66000000e+00,  -2.65000000e+00,  -2.64000000e+00,\n",
       "        -2.63000000e+00,  -2.62000000e+00,  -2.61000000e+00,\n",
       "        -2.60000000e+00,  -2.59000000e+00,  -2.58000000e+00,\n",
       "        -2.57000000e+00,  -2.56000000e+00,  -2.55000000e+00,\n",
       "        -2.54000000e+00,  -2.53000000e+00,  -2.52000000e+00,\n",
       "        -2.51000000e+00,  -2.50000000e+00,  -2.49000000e+00,\n",
       "        -2.48000000e+00,  -2.47000000e+00,  -2.46000000e+00,\n",
       "        -2.45000000e+00,  -2.44000000e+00,  -2.43000000e+00,\n",
       "        -2.42000000e+00,  -2.41000000e+00,  -2.40000000e+00,\n",
       "        -2.39000000e+00,  -2.38000000e+00,  -2.37000000e+00,\n",
       "        -2.36000000e+00,  -2.35000000e+00,  -2.34000000e+00,\n",
       "        -2.33000000e+00,  -2.32000000e+00,  -2.31000000e+00,\n",
       "        -2.30000000e+00,  -2.29000000e+00,  -2.28000000e+00,\n",
       "        -2.27000000e+00,  -2.26000000e+00,  -2.25000000e+00,\n",
       "        -2.24000000e+00,  -2.23000000e+00,  -2.22000000e+00,\n",
       "        -2.21000000e+00,  -2.20000000e+00,  -2.19000000e+00,\n",
       "        -2.18000000e+00,  -2.17000000e+00,  -2.16000000e+00,\n",
       "        -2.15000000e+00,  -2.14000000e+00,  -2.13000000e+00,\n",
       "        -2.12000000e+00,  -2.11000000e+00,  -2.10000000e+00,\n",
       "        -2.09000000e+00,  -2.08000000e+00,  -2.07000000e+00,\n",
       "        -2.06000000e+00,  -2.05000000e+00,  -2.04000000e+00,\n",
       "        -2.03000000e+00,  -2.02000000e+00,  -2.01000000e+00,\n",
       "        -2.00000000e+00,  -1.99000000e+00,  -1.98000000e+00,\n",
       "        -1.97000000e+00,  -1.96000000e+00,  -1.95000000e+00,\n",
       "        -1.94000000e+00,  -1.93000000e+00,  -1.92000000e+00,\n",
       "        -1.91000000e+00,  -1.90000000e+00,  -1.89000000e+00,\n",
       "        -1.88000000e+00,  -1.87000000e+00,  -1.86000000e+00,\n",
       "        -1.85000000e+00,  -1.84000000e+00,  -1.83000000e+00,\n",
       "        -1.82000000e+00,  -1.81000000e+00,  -1.80000000e+00,\n",
       "        -1.79000000e+00,  -1.78000000e+00,  -1.77000000e+00,\n",
       "        -1.76000000e+00,  -1.75000000e+00,  -1.74000000e+00,\n",
       "        -1.73000000e+00,  -1.72000000e+00,  -1.71000000e+00,\n",
       "        -1.70000000e+00,  -1.69000000e+00,  -1.68000000e+00,\n",
       "        -1.67000000e+00,  -1.66000000e+00,  -1.65000000e+00,\n",
       "        -1.64000000e+00,  -1.63000000e+00,  -1.62000000e+00,\n",
       "        -1.61000000e+00,  -1.60000000e+00,  -1.59000000e+00,\n",
       "        -1.58000000e+00,  -1.57000000e+00,  -1.56000000e+00,\n",
       "        -1.55000000e+00,  -1.54000000e+00,  -1.53000000e+00,\n",
       "        -1.52000000e+00,  -1.51000000e+00,  -1.50000000e+00,\n",
       "        -1.49000000e+00,  -1.48000000e+00,  -1.47000000e+00,\n",
       "        -1.46000000e+00,  -1.45000000e+00,  -1.44000000e+00,\n",
       "        -1.43000000e+00,  -1.42000000e+00,  -1.41000000e+00,\n",
       "        -1.40000000e+00,  -1.39000000e+00,  -1.38000000e+00,\n",
       "        -1.37000000e+00,  -1.36000000e+00,  -1.35000000e+00,\n",
       "        -1.34000000e+00,  -1.33000000e+00,  -1.32000000e+00,\n",
       "        -1.31000000e+00,  -1.30000000e+00,  -1.29000000e+00,\n",
       "        -1.28000000e+00,  -1.27000000e+00,  -1.26000000e+00,\n",
       "        -1.25000000e+00,  -1.24000000e+00,  -1.23000000e+00,\n",
       "        -1.22000000e+00,  -1.21000000e+00,  -1.20000000e+00,\n",
       "        -1.19000000e+00,  -1.18000000e+00,  -1.17000000e+00,\n",
       "        -1.16000000e+00,  -1.15000000e+00,  -1.14000000e+00,\n",
       "        -1.13000000e+00,  -1.12000000e+00,  -1.11000000e+00,\n",
       "        -1.10000000e+00,  -1.09000000e+00,  -1.08000000e+00,\n",
       "        -1.07000000e+00,  -1.06000000e+00,  -1.05000000e+00,\n",
       "        -1.04000000e+00,  -1.03000000e+00,  -1.02000000e+00,\n",
       "        -1.01000000e+00,  -1.00000000e+00,  -9.90000000e-01,\n",
       "        -9.80000000e-01,  -9.70000000e-01,  -9.60000000e-01,\n",
       "        -9.50000000e-01,  -9.40000000e-01,  -9.30000000e-01,\n",
       "        -9.20000000e-01,  -9.10000000e-01,  -9.00000000e-01,\n",
       "        -8.90000000e-01,  -8.80000000e-01,  -8.70000000e-01,\n",
       "        -8.60000000e-01,  -8.50000000e-01,  -8.40000000e-01,\n",
       "        -8.30000000e-01,  -8.20000000e-01,  -8.10000000e-01,\n",
       "        -8.00000000e-01,  -7.90000000e-01,  -7.80000000e-01,\n",
       "        -7.70000000e-01,  -7.60000000e-01,  -7.50000000e-01,\n",
       "        -7.40000000e-01,  -7.30000000e-01,  -7.20000000e-01,\n",
       "        -7.10000000e-01,  -7.00000000e-01,  -6.90000000e-01,\n",
       "        -6.80000000e-01,  -6.70000000e-01,  -6.60000000e-01,\n",
       "        -6.50000000e-01,  -6.40000000e-01,  -6.30000000e-01,\n",
       "        -6.20000000e-01,  -6.10000000e-01,  -6.00000000e-01,\n",
       "        -5.90000000e-01,  -5.80000000e-01,  -5.70000000e-01,\n",
       "        -5.60000000e-01,  -5.50000000e-01,  -5.40000000e-01,\n",
       "        -5.30000000e-01,  -5.20000000e-01,  -5.10000000e-01,\n",
       "        -5.00000000e-01,  -4.90000000e-01,  -4.80000000e-01,\n",
       "        -4.70000000e-01,  -4.60000000e-01,  -4.50000000e-01,\n",
       "        -4.40000000e-01,  -4.30000000e-01,  -4.20000000e-01,\n",
       "        -4.10000000e-01,  -4.00000000e-01,  -3.90000000e-01,\n",
       "        -3.80000000e-01,  -3.70000000e-01,  -3.60000000e-01,\n",
       "        -3.50000000e-01,  -3.40000000e-01,  -3.30000000e-01,\n",
       "        -3.20000000e-01,  -3.10000000e-01,  -3.00000000e-01,\n",
       "        -2.90000000e-01,  -2.80000000e-01,  -2.70000000e-01,\n",
       "        -2.60000000e-01,  -2.50000000e-01,  -2.40000000e-01,\n",
       "        -2.30000000e-01,  -2.20000000e-01,  -2.10000000e-01,\n",
       "        -2.00000000e-01,  -1.90000000e-01,  -1.80000000e-01,\n",
       "        -1.70000000e-01,  -1.60000000e-01,  -1.50000000e-01,\n",
       "        -1.40000000e-01,  -1.30000000e-01,  -1.20000000e-01,\n",
       "        -1.10000000e-01,  -1.00000000e-01,  -9.00000000e-02,\n",
       "        -8.00000000e-02,  -7.00000000e-02,  -6.00000000e-02,\n",
       "        -5.00000000e-02,  -4.00000000e-02,  -3.00000000e-02,\n",
       "        -2.00000000e-02,  -1.00000000e-02,  -1.06581410e-13,\n",
       "         1.00000000e-02,   2.00000000e-02,   3.00000000e-02,\n",
       "         4.00000000e-02,   5.00000000e-02,   6.00000000e-02,\n",
       "         7.00000000e-02,   8.00000000e-02,   9.00000000e-02,\n",
       "         1.00000000e-01,   1.10000000e-01,   1.20000000e-01,\n",
       "         1.30000000e-01,   1.40000000e-01,   1.50000000e-01,\n",
       "         1.60000000e-01,   1.70000000e-01,   1.80000000e-01,\n",
       "         1.90000000e-01,   2.00000000e-01,   2.10000000e-01,\n",
       "         2.20000000e-01,   2.30000000e-01,   2.40000000e-01,\n",
       "         2.50000000e-01,   2.60000000e-01,   2.70000000e-01,\n",
       "         2.80000000e-01,   2.90000000e-01,   3.00000000e-01,\n",
       "         3.10000000e-01,   3.20000000e-01,   3.30000000e-01,\n",
       "         3.40000000e-01,   3.50000000e-01,   3.60000000e-01,\n",
       "         3.70000000e-01,   3.80000000e-01,   3.90000000e-01,\n",
       "         4.00000000e-01,   4.10000000e-01,   4.20000000e-01,\n",
       "         4.30000000e-01,   4.40000000e-01,   4.50000000e-01,\n",
       "         4.60000000e-01,   4.70000000e-01,   4.80000000e-01,\n",
       "         4.90000000e-01,   5.00000000e-01,   5.10000000e-01,\n",
       "         5.20000000e-01,   5.30000000e-01,   5.40000000e-01,\n",
       "         5.50000000e-01,   5.60000000e-01,   5.70000000e-01,\n",
       "         5.80000000e-01,   5.90000000e-01,   6.00000000e-01,\n",
       "         6.10000000e-01,   6.20000000e-01,   6.30000000e-01,\n",
       "         6.40000000e-01,   6.50000000e-01,   6.60000000e-01,\n",
       "         6.70000000e-01,   6.80000000e-01,   6.90000000e-01,\n",
       "         7.00000000e-01,   7.10000000e-01,   7.20000000e-01,\n",
       "         7.30000000e-01,   7.40000000e-01,   7.50000000e-01,\n",
       "         7.60000000e-01,   7.70000000e-01,   7.80000000e-01,\n",
       "         7.90000000e-01,   8.00000000e-01,   8.10000000e-01,\n",
       "         8.20000000e-01,   8.30000000e-01,   8.40000000e-01,\n",
       "         8.50000000e-01,   8.60000000e-01,   8.70000000e-01,\n",
       "         8.80000000e-01,   8.90000000e-01,   9.00000000e-01,\n",
       "         9.10000000e-01,   9.20000000e-01,   9.30000000e-01,\n",
       "         9.40000000e-01,   9.50000000e-01,   9.60000000e-01,\n",
       "         9.70000000e-01,   9.80000000e-01,   9.90000000e-01,\n",
       "         1.00000000e+00,   1.01000000e+00,   1.02000000e+00,\n",
       "         1.03000000e+00,   1.04000000e+00,   1.05000000e+00,\n",
       "         1.06000000e+00,   1.07000000e+00,   1.08000000e+00,\n",
       "         1.09000000e+00,   1.10000000e+00,   1.11000000e+00,\n",
       "         1.12000000e+00,   1.13000000e+00,   1.14000000e+00,\n",
       "         1.15000000e+00,   1.16000000e+00,   1.17000000e+00,\n",
       "         1.18000000e+00,   1.19000000e+00,   1.20000000e+00,\n",
       "         1.21000000e+00,   1.22000000e+00,   1.23000000e+00,\n",
       "         1.24000000e+00,   1.25000000e+00,   1.26000000e+00,\n",
       "         1.27000000e+00,   1.28000000e+00,   1.29000000e+00,\n",
       "         1.30000000e+00,   1.31000000e+00,   1.32000000e+00,\n",
       "         1.33000000e+00,   1.34000000e+00,   1.35000000e+00,\n",
       "         1.36000000e+00,   1.37000000e+00,   1.38000000e+00,\n",
       "         1.39000000e+00,   1.40000000e+00,   1.41000000e+00,\n",
       "         1.42000000e+00,   1.43000000e+00,   1.44000000e+00,\n",
       "         1.45000000e+00,   1.46000000e+00,   1.47000000e+00,\n",
       "         1.48000000e+00,   1.49000000e+00,   1.50000000e+00,\n",
       "         1.51000000e+00,   1.52000000e+00,   1.53000000e+00,\n",
       "         1.54000000e+00,   1.55000000e+00,   1.56000000e+00,\n",
       "         1.57000000e+00,   1.58000000e+00,   1.59000000e+00,\n",
       "         1.60000000e+00,   1.61000000e+00,   1.62000000e+00,\n",
       "         1.63000000e+00,   1.64000000e+00,   1.65000000e+00,\n",
       "         1.66000000e+00,   1.67000000e+00,   1.68000000e+00,\n",
       "         1.69000000e+00,   1.70000000e+00,   1.71000000e+00,\n",
       "         1.72000000e+00,   1.73000000e+00,   1.74000000e+00,\n",
       "         1.75000000e+00,   1.76000000e+00,   1.77000000e+00,\n",
       "         1.78000000e+00,   1.79000000e+00,   1.80000000e+00,\n",
       "         1.81000000e+00,   1.82000000e+00,   1.83000000e+00,\n",
       "         1.84000000e+00,   1.85000000e+00,   1.86000000e+00,\n",
       "         1.87000000e+00,   1.88000000e+00,   1.89000000e+00,\n",
       "         1.90000000e+00,   1.91000000e+00,   1.92000000e+00,\n",
       "         1.93000000e+00,   1.94000000e+00,   1.95000000e+00,\n",
       "         1.96000000e+00,   1.97000000e+00,   1.98000000e+00,\n",
       "         1.99000000e+00,   2.00000000e+00,   2.01000000e+00,\n",
       "         2.02000000e+00,   2.03000000e+00,   2.04000000e+00,\n",
       "         2.05000000e+00,   2.06000000e+00,   2.07000000e+00,\n",
       "         2.08000000e+00,   2.09000000e+00,   2.10000000e+00,\n",
       "         2.11000000e+00,   2.12000000e+00,   2.13000000e+00,\n",
       "         2.14000000e+00,   2.15000000e+00,   2.16000000e+00,\n",
       "         2.17000000e+00,   2.18000000e+00,   2.19000000e+00,\n",
       "         2.20000000e+00,   2.21000000e+00,   2.22000000e+00,\n",
       "         2.23000000e+00,   2.24000000e+00,   2.25000000e+00,\n",
       "         2.26000000e+00,   2.27000000e+00,   2.28000000e+00,\n",
       "         2.29000000e+00,   2.30000000e+00,   2.31000000e+00,\n",
       "         2.32000000e+00,   2.33000000e+00,   2.34000000e+00,\n",
       "         2.35000000e+00,   2.36000000e+00,   2.37000000e+00,\n",
       "         2.38000000e+00,   2.39000000e+00,   2.40000000e+00,\n",
       "         2.41000000e+00,   2.42000000e+00,   2.43000000e+00,\n",
       "         2.44000000e+00,   2.45000000e+00,   2.46000000e+00,\n",
       "         2.47000000e+00,   2.48000000e+00,   2.49000000e+00,\n",
       "         2.50000000e+00,   2.51000000e+00,   2.52000000e+00,\n",
       "         2.53000000e+00,   2.54000000e+00,   2.55000000e+00,\n",
       "         2.56000000e+00,   2.57000000e+00,   2.58000000e+00,\n",
       "         2.59000000e+00,   2.60000000e+00,   2.61000000e+00,\n",
       "         2.62000000e+00,   2.63000000e+00,   2.64000000e+00,\n",
       "         2.65000000e+00,   2.66000000e+00,   2.67000000e+00,\n",
       "         2.68000000e+00,   2.69000000e+00,   2.70000000e+00,\n",
       "         2.71000000e+00,   2.72000000e+00,   2.73000000e+00,\n",
       "         2.74000000e+00,   2.75000000e+00,   2.76000000e+00,\n",
       "         2.77000000e+00,   2.78000000e+00,   2.79000000e+00,\n",
       "         2.80000000e+00,   2.81000000e+00,   2.82000000e+00,\n",
       "         2.83000000e+00,   2.84000000e+00,   2.85000000e+00,\n",
       "         2.86000000e+00,   2.87000000e+00,   2.88000000e+00,\n",
       "         2.89000000e+00,   2.90000000e+00,   2.91000000e+00,\n",
       "         2.92000000e+00,   2.93000000e+00,   2.94000000e+00,\n",
       "         2.95000000e+00,   2.96000000e+00,   2.97000000e+00,\n",
       "         2.98000000e+00,   2.99000000e+00,   3.00000000e+00,\n",
       "         3.01000000e+00,   3.02000000e+00,   3.03000000e+00,\n",
       "         3.04000000e+00,   3.05000000e+00,   3.06000000e+00,\n",
       "         3.07000000e+00,   3.08000000e+00,   3.09000000e+00,\n",
       "         3.10000000e+00,   3.11000000e+00,   3.12000000e+00,\n",
       "         3.13000000e+00,   3.14000000e+00,   3.15000000e+00,\n",
       "         3.16000000e+00,   3.17000000e+00,   3.18000000e+00,\n",
       "         3.19000000e+00,   3.20000000e+00,   3.21000000e+00,\n",
       "         3.22000000e+00,   3.23000000e+00,   3.24000000e+00,\n",
       "         3.25000000e+00,   3.26000000e+00,   3.27000000e+00,\n",
       "         3.28000000e+00,   3.29000000e+00,   3.30000000e+00,\n",
       "         3.31000000e+00,   3.32000000e+00,   3.33000000e+00,\n",
       "         3.34000000e+00,   3.35000000e+00,   3.36000000e+00,\n",
       "         3.37000000e+00,   3.38000000e+00,   3.39000000e+00,\n",
       "         3.40000000e+00,   3.41000000e+00,   3.42000000e+00,\n",
       "         3.43000000e+00,   3.44000000e+00,   3.45000000e+00,\n",
       "         3.46000000e+00,   3.47000000e+00,   3.48000000e+00,\n",
       "         3.49000000e+00,   3.50000000e+00,   3.51000000e+00,\n",
       "         3.52000000e+00,   3.53000000e+00,   3.54000000e+00,\n",
       "         3.55000000e+00,   3.56000000e+00,   3.57000000e+00,\n",
       "         3.58000000e+00,   3.59000000e+00,   3.60000000e+00,\n",
       "         3.61000000e+00,   3.62000000e+00,   3.63000000e+00,\n",
       "         3.64000000e+00,   3.65000000e+00,   3.66000000e+00,\n",
       "         3.67000000e+00,   3.68000000e+00,   3.69000000e+00,\n",
       "         3.70000000e+00,   3.71000000e+00,   3.72000000e+00,\n",
       "         3.73000000e+00,   3.74000000e+00,   3.75000000e+00,\n",
       "         3.76000000e+00,   3.77000000e+00,   3.78000000e+00,\n",
       "         3.79000000e+00,   3.80000000e+00,   3.81000000e+00,\n",
       "         3.82000000e+00,   3.83000000e+00,   3.84000000e+00,\n",
       "         3.85000000e+00,   3.86000000e+00,   3.87000000e+00,\n",
       "         3.88000000e+00,   3.89000000e+00,   3.90000000e+00,\n",
       "         3.91000000e+00,   3.92000000e+00,   3.93000000e+00,\n",
       "         3.94000000e+00,   3.95000000e+00,   3.96000000e+00,\n",
       "         3.97000000e+00,   3.98000000e+00,   3.99000000e+00,\n",
       "         4.00000000e+00,   4.01000000e+00,   4.02000000e+00,\n",
       "         4.03000000e+00,   4.04000000e+00,   4.05000000e+00,\n",
       "         4.06000000e+00,   4.07000000e+00,   4.08000000e+00,\n",
       "         4.09000000e+00,   4.10000000e+00,   4.11000000e+00,\n",
       "         4.12000000e+00,   4.13000000e+00,   4.14000000e+00,\n",
       "         4.15000000e+00,   4.16000000e+00,   4.17000000e+00,\n",
       "         4.18000000e+00,   4.19000000e+00,   4.20000000e+00,\n",
       "         4.21000000e+00,   4.22000000e+00,   4.23000000e+00,\n",
       "         4.24000000e+00,   4.25000000e+00,   4.26000000e+00,\n",
       "         4.27000000e+00,   4.28000000e+00,   4.29000000e+00,\n",
       "         4.30000000e+00,   4.31000000e+00,   4.32000000e+00,\n",
       "         4.33000000e+00,   4.34000000e+00,   4.35000000e+00,\n",
       "         4.36000000e+00,   4.37000000e+00,   4.38000000e+00,\n",
       "         4.39000000e+00,   4.40000000e+00,   4.41000000e+00,\n",
       "         4.42000000e+00,   4.43000000e+00,   4.44000000e+00,\n",
       "         4.45000000e+00,   4.46000000e+00,   4.47000000e+00,\n",
       "         4.48000000e+00,   4.49000000e+00,   4.50000000e+00,\n",
       "         4.51000000e+00,   4.52000000e+00,   4.53000000e+00,\n",
       "         4.54000000e+00,   4.55000000e+00,   4.56000000e+00,\n",
       "         4.57000000e+00,   4.58000000e+00,   4.59000000e+00,\n",
       "         4.60000000e+00,   4.61000000e+00,   4.62000000e+00,\n",
       "         4.63000000e+00,   4.64000000e+00,   4.65000000e+00,\n",
       "         4.66000000e+00,   4.67000000e+00,   4.68000000e+00,\n",
       "         4.69000000e+00,   4.70000000e+00,   4.71000000e+00,\n",
       "         4.72000000e+00,   4.73000000e+00,   4.74000000e+00,\n",
       "         4.75000000e+00,   4.76000000e+00,   4.77000000e+00,\n",
       "         4.78000000e+00,   4.79000000e+00,   4.80000000e+00,\n",
       "         4.81000000e+00,   4.82000000e+00,   4.83000000e+00,\n",
       "         4.84000000e+00,   4.85000000e+00,   4.86000000e+00,\n",
       "         4.87000000e+00,   4.88000000e+00,   4.89000000e+00,\n",
       "         4.90000000e+00,   4.91000000e+00,   4.92000000e+00,\n",
       "         4.93000000e+00,   4.94000000e+00,   4.95000000e+00,\n",
       "         4.96000000e+00,   4.97000000e+00,   4.98000000e+00,\n",
       "         4.99000000e+00])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xs,ys = np.meshgrid(points,points)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],\n",
       "       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],\n",
       "       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],\n",
       "       ..., \n",
       "       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],\n",
       "       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],\n",
       "       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],\n",
       "       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],\n",
       "       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],\n",
       "       ..., \n",
       "       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],\n",
       "       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],\n",
       "       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "z = np.sqrt(xs**2 + ys**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 7.07106781,  7.06400028,  7.05693985, ...,  7.04988652,\n",
       "         7.05693985,  7.06400028],\n",
       "       [ 7.06400028,  7.05692568,  7.04985815, ...,  7.04279774,\n",
       "         7.04985815,  7.05692568],\n",
       "       [ 7.05693985,  7.04985815,  7.04278354, ...,  7.03571603,\n",
       "         7.04278354,  7.04985815],\n",
       "       ..., \n",
       "       [ 7.04988652,  7.04279774,  7.03571603, ...,  7.0286414 ,\n",
       "         7.03571603,  7.04279774],\n",
       "       [ 7.05693985,  7.04985815,  7.04278354, ...,  7.03571603,\n",
       "         7.04278354,  7.04985815],\n",
       "       [ 7.06400028,  7.05692568,  7.04985815, ...,  7.04279774,\n",
       "         7.04985815,  7.05692568]])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pylab as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x9bfc1d0>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.imshow(z,cmap = plt.cm.gray)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x9dcfeb8>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x9e21630>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.title(\"Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa347b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xarr = np.arange(1.1,1.6,0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "yarr = np.arange(2.1,2.6,0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cond = np.array([True,False,True,True,False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.1000000000000001,\n",
       " 2.2000000000000002,\n",
       " 1.3000000000000003,\n",
       " 1.4000000000000004,\n",
       " 2.5000000000000004]"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "result = np.where(cond,xarr,yarr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.1,  2.2,  1.3,  1.4,  2.5])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.random.randn(4,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.23812687,  0.04384386, -0.80042656, -0.71330494],\n",
       "       [ 0.12220601,  1.63857916,  1.0499807 , -0.80295703],\n",
       "       [ 0.8511605 , -0.2043042 ,  0.84916861,  1.44520826],\n",
       "       [ 0.37431972, -0.18588924,  0.83379404, -0.11675306]])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True,  True, False, False],\n",
       "       [ True,  True,  True, False],\n",
       "       [ True, False,  True,  True],\n",
       "       [ True, False,  True, False]], dtype=bool)"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr > 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2,  2, -2, -2],\n",
       "       [ 2,  2,  2, -2],\n",
       "       [ 2, -2,  2,  2],\n",
       "       [ 2, -2,  2, -2]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.where(arr > 0,2,-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.        ,  2.        , -0.80042656, -0.71330494],\n",
       "       [ 2.        ,  2.        ,  2.        , -0.80295703],\n",
       "       [ 2.        , -0.2043042 ,  2.        ,  2.        ],\n",
       "       [ 2.        , -0.18588924,  2.        , -0.11675306]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.where(arr > 0,2,arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(5,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.53693942,  2.15280955, -0.23962782, -0.15094997],\n",
       "       [-0.15642684, -0.03282702,  1.28023596, -0.13244577],\n",
       "       [-1.15279503,  1.14920418, -0.44654644, -0.731111  ],\n",
       "       [ 0.18052181, -0.65563609,  0.40615284, -0.16591832],\n",
       "       [ 0.36259018, -0.04899501, -0.59253067,  1.43855695]])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.096366103180189469"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.096366103180189469"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.9273220636037893"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.30632308,  0.23963408, -0.29531207, -0.05871994,  0.28990536])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.mean(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.26060986,  0.51291112,  0.08153677,  0.05162638])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.mean(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.22529234,  0.95853633, -1.18124829, -0.23487976,  1.15962145])"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.sum(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  3,  6, 10, 15, 21, 28])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.arange(9).reshape((3,-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 1, 2],\n",
       "       [3, 4, 5],\n",
       "       [6, 7, 8]])"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2],\n",
       "       [ 3,  5,  7],\n",
       "       [ 9, 12, 15]])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.cumsum(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0,   0,   0],\n",
       "       [  3,  12,  60],\n",
       "       [  6,  42, 336]])"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.cumprod(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "506"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(arr > 0).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "bools = np.array([False,False,True,False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bools.any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bools.all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.71966828,  0.92398676, -1.81484653, -0.24309887, -2.17621415,\n",
       "        0.88685782])"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr.sort()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-2.17621415, -1.81484653, -0.24309887,  0.71966828,  0.88685782,\n",
       "        0.92398676])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.random.randn(5,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.25752664,  0.80176733,  0.03543529, -0.1496198 ],\n",
       "       [ 1.4851359 ,  0.64333708,  0.24305537,  1.85690132],\n",
       "       [ 0.35870105, -0.05206015,  0.89253615, -1.29283684],\n",
       "       [-0.73467576, -1.89303671,  0.63683005, -1.08313304],\n",
       "       [ 1.17999176, -0.23901963, -0.92347527, -0.39951298]])"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr.sort(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.25752664, -0.1496198 ,  0.03543529,  0.80176733],\n",
       "       [ 0.24305537,  0.64333708,  1.4851359 ,  1.85690132],\n",
       "       [-1.29283684, -0.05206015,  0.35870105,  0.89253615],\n",
       "       [-1.89303671, -1.08313304, -0.73467576,  0.63683005],\n",
       "       [-0.92347527, -0.39951298, -0.23901963,  1.17999176]])"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "large_arr = np.random.randn(1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "large_arr.sort()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1.6214161502179567"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "large_arr[int(0.05*len(large_arr))]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    " names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will',\n",
    "'Joe', 'Joe'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Bob', 'Joe', 'Will'], \n",
       "      dtype='|S4')"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.unique(names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.unique(ints)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Bob', 'Joe', 'Will']"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted(set(names))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "values = np.array([6, 0, 0, 3, 2, 5, 6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True,  True, False,  True], dtype=bool)"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.in1d(values,[2,3,6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arr = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.save('some_array',arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.load('some_array.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.savez('arr_arcivhe.npz',a=arr,b=arr,c=arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "arch = np.load('arr_archive.npz')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<numpy.lib.npyio.NpzFile at 0x1060dda0>"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arch['b']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.savez_compressed('arr_compressed.npz',a=arr,b=arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.load('arr_compressed.npz')['a']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.arange(1,7).reshape((2,-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = np.array([[6., 23.], [-1, 7], [8, 9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  6.,  23.],\n",
       "       [ -1.,   7.],\n",
       "       [  8.,   9.]])"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  28.,   64.],\n",
       "       [  67.,  181.]])"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.dot(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  28.,   64.],\n",
       "       [  67.,  181.]])"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  6.,  15.])"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(x,np.ones(x.shape[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-119-5c333f5cb7c2>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-119-5c333f5cb7c2>\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m    x @ np.ones(3)\u001b[0m\n\u001b[1;37m      ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from numpy.linalg import inv,qr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = np.random.randn(5,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mat = X.T.dot(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  5016.44244698,    330.38404013,  -4396.9896985 ,   3828.21263398,\n",
       "         -9466.43120285],\n",
       "       [   330.38404013,     21.88920356,   -289.51263222,    252.12352109,\n",
       "          -623.37009247],\n",
       "       [ -4396.9896985 ,   -289.51263222,   3854.56680263,  -3355.58369295,\n",
       "          8297.85069539],\n",
       "       [  3828.21263398,    252.12352109,  -3355.58369295,   2921.59258656,\n",
       "         -7224.24044172],\n",
       "       [ -9466.43120285,   -623.37009247,   8297.85069539,  -7224.24044172,\n",
       "         17864.99984522]])"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv(mat)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.96855665, -0.84362223, -0.6131471 ,  0.51397956,  0.97316655],\n",
       "       [-0.36404413, -0.08026171, -0.13062515, -0.83836551, -0.48020904],\n",
       "       [ 1.45881594,  0.10428314,  1.18015969, -0.49824802,  0.02529911],\n",
       "       [-0.30037263, -2.55967886,  0.85623407,  1.07198125, -0.21241748],\n",
       "       [ 1.66091281, -1.12393289, -0.48403005, -2.20691456,  0.17536843]])"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [],
   "source": [
    "k = mat.dot(inv(mat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0]], dtype=int16)"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k.astype('i2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1.00000000e+00,   1.05717100e-13,   1.03198337e-13,\n",
       "          1.71751898e-12,   3.15371927e-12],\n",
       "       [ -7.66918699e-13,   1.00000000e+00,   1.40486135e-12,\n",
       "         -1.27672070e-12,   6.69528693e-12],\n",
       "       [  3.38103352e-12,   5.63616738e-14,   1.00000000e+00,\n",
       "          2.00483029e-12,  -2.61388398e-12],\n",
       "       [ -7.84371876e-12,  -5.53984122e-13,   6.48580676e-12,\n",
       "          1.00000000e+00,   9.66288237e-12],\n",
       "       [ -3.10841331e-13,  -5.91399596e-14,  -1.05476041e-12,\n",
       "          6.45569645e-13,   1.00000000e+00]])"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "q,r = qr(mat)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.79984332, -0.08987088, -0.20860422, -0.3736864 , -0.41111634],\n",
       "       [ 0.22928717, -0.94954211, -0.15288491, -0.14727682, -0.02707225],\n",
       "       [-0.01510384,  0.1151509 , -0.91768149,  0.12045336,  0.36036622],\n",
       "       [ 0.51730054,  0.2766458 , -0.19171741, -0.7215806 , -0.31374055],\n",
       "       [-0.19962486, -0.02236898,  0.23284243, -0.55089059,  0.77585663]])"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -7.56101726e+00,   3.09456491e+00,   4.09241347e-01,\n",
       "          6.64174006e+00,  -1.40281483e+00],\n",
       "       [  0.00000000e+00,  -8.25097934e+00,   1.60044561e+00,\n",
       "          3.13154397e+00,   2.35059151e-01],\n",
       "       [  0.00000000e+00,   0.00000000e+00,  -2.80609279e+00,\n",
       "         -1.49704486e+00,   6.97999440e-01],\n",
       "       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "         -3.66665175e+00,  -1.48274979e+00],\n",
       "       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00,\n",
       "          0.00000000e+00,   4.34288627e-05]])"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6.04762915, -1.73364428,  0.11420038, -3.91131828,  1.50936703],\n",
       "       [-1.73364428,  8.54419641, -0.99684747, -0.68177869, -0.4331861 ],\n",
       "       [ 0.11420038, -0.99684747,  2.75321105,  1.19243416, -0.77087255],\n",
       "       [-3.91131828, -0.68177869,  1.19243416,  7.2348985 ,  0.27544248],\n",
       "       [ 1.50936703, -0.4331861 , -0.77087255,  0.27544248,  1.25416917]])"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q.dot(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "samples = np.random.normal(size=(4,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.20972162, -0.64644355, -0.54832889, -0.02727547],\n",
       "       [-0.11537202,  0.80972889, -0.37107937,  0.52157878],\n",
       "       [ 0.45467551, -0.7936828 ,  0.09083678,  0.60838932],\n",
       "       [-1.24523547,  0.15159958,  0.55877242,  0.26963942]])"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from random import normalvariate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "N = 1000000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 loop, best of 3: 789 ms per loop\n"
     ]
    }
   ],
   "source": [
    "%timeit samples= [normalvariate(0,1) for _ in range(N)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 loops, best of 3: 33.9 ms per loop\n"
     ]
    }
   ],
   "source": [
    "%timeit np.random.normal(size=N)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "rng = np.random.RandomState(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.47143516, -1.19097569,  1.43270697, -0.3126519 , -0.72058873,\n",
       "        0.88716294,  0.85958841, -0.6365235 ,  0.01569637, -2.24268495])"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng.randn(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "position = 0 \n",
    "walk = [position]\n",
    "steps = 1000\n",
    "for i in range(steps):\n",
    "    step = 1 if random.randint(0,1) else -1\n",
    "    position += step\n",
    "    walk.append(position)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x120db860>]"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.plot(walk[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc9ff2e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "nsteps = 1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "draws = np.random.randint(0,2,size=nsteps)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "steps = np.where(draws > 0,1,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "walk = steps.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0,\n",
       "       1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0,\n",
       "       0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
       "       1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0,\n",
       "       0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,\n",
       "       1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1,\n",
       "       1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1,\n",
       "       1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0,\n",
       "       1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1,\n",
       "       1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,\n",
       "       0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1,\n",
       "       0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1,\n",
       "       0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,\n",
       "       0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1,\n",
       "       1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,\n",
       "       1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0,\n",
       "       1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0,\n",
       "       0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1,\n",
       "       1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0,\n",
       "       1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1,\n",
       "       1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1,\n",
       "       1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1,\n",
       "       0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1,\n",
       "       0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1,\n",
       "       0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0,\n",
       "       1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1,\n",
       "       1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0,\n",
       "       1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1,\n",
       "       1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,\n",
       "       1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1,\n",
       "       1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0,\n",
       "       1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1,\n",
       "       0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1,\n",
       "       0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,\n",
       "       1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1,\n",
       "       0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0,\n",
       "       0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,\n",
       "       1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,\n",
       "       1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0,\n",
       "       1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0])"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "draws"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12264d68>]"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.plot(walk[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xca1e470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "60"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-9"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "297"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.abs(walk) >= 10).argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "nwalks = 5000\n",
    "nsteps = 1000\n",
    "draws = np.random.randint(0,2,size=(nwalks,nsteps))\n",
    "steps = np.where(draws > 0,1,-1)\n",
    "walks = steps.cumsum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1,   2,   3, ...,  46,  47,  46],\n",
       "       [  1,   0,   1, ...,  40,  41,  42],\n",
       "       [  1,   2,   3, ..., -26, -27, -28],\n",
       "       ..., \n",
       "       [  1,   0,   1, ...,  64,  65,  66],\n",
       "       [  1,   2,   1, ...,   2,   1,   0],\n",
       "       [ -1,  -2,  -3, ...,  32,  33,  34]])"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "122"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-128"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walks.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "hits30 = (np.abs(walks)>=30).any(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True,  True,  True, ...,  True, False,  True], dtype=bool)"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hits30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3368"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hits30.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "crossing_times = (np.abs(walks[hits30])>30).argmax(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([136, 398, 344, ..., 410, 302, 750], dtype=int64)"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "crossing_times"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "495.15439429928739"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "crossing_times.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "steps = np.random.normal(loc=0,scale=0.25,size=(nwalks,nsteps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "walk = steps.cumsum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "possible = (np.abs(walk)>=30).any(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "first_step = (np.abs(walk[possible])>=30).argmax(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([], dtype=int64)"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -2.04721967e-01,  -2.38798674e-01,  -4.86614938e-01, ...,\n",
       "         -7.77977051e-01,  -5.65471210e-01,  -1.25528443e-01],\n",
       "       [ -9.06659494e-02,  -4.32547941e-02,   5.54687233e-02, ...,\n",
       "          1.29059312e+01,   1.31599860e+01,   1.29374340e+01],\n",
       "       [  9.42323969e-03,   4.36060080e-02,  -3.79448524e-01, ...,\n",
       "          3.46412368e+00,   3.34591495e+00,   2.63473663e+00],\n",
       "       ..., \n",
       "       [  1.23011802e-01,  -5.85454165e-02,   6.92772514e-02, ...,\n",
       "          7.70007785e+00,   7.76554564e+00,   8.24474598e+00],\n",
       "       [ -2.05502686e-01,  -4.09069667e-02,  -7.22936453e-02, ...,\n",
       "         -1.77989085e+00,  -1.70157451e+00,  -1.42603395e+00],\n",
       "       [ -2.30561721e-01,   5.86823124e-02,   1.43130384e-01, ...,\n",
       "         -4.71520448e+00,  -4.73661181e+00,  -4.67317877e+00]])"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "walk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
